package main

import "fmt"

// go语言 切片
// 切片是数组的引用
func main() {

	var intArr [5]int = [...]int{1, 34, 1, 1, 34}

	//[1:3] [start,end]
	//范围不包含 end
	//默认从零开始
	//slice := intArr[:len(intArr)]
	//从数组的最大长度结束
	//slice := intArr[2:]
	// 0 数组的最大长度
	slice := intArr[:]

	slice2 := slice[:]
	slice2[0] = 88
	slice = append(slice, 1212)
	fmt.Printf("intArr type  %T \n", intArr)
	fmt.Printf("slice type %T \n", slice)
	fmt.Println("intArr", intArr)

	fmt.Println("slice2 元素是", slice2)
	fmt.Println("slice 元素是", slice)
	fmt.Println("slice 元素个数", len(slice))

	//动态变化的
	fmt.Println("slice 的容量", cap(slice))

	for i, v := range slice {
		fmt.Printf("index %v value %v addr %p\n", i, v, &v)
	}

	//创建切片的第二种方式
	//make(类型,元素个数,容量)
	var slice1 []int = make([]int, 4, 11)

	slice1[1] = 123
	fmt.Println()

	for i, v := range slice1 {
		fmt.Printf("index %v value %v addr %p\n", i, v, &v)
	}

	fmt.Printf("slice1 type %T \n", slice1)
	fmt.Println("slice1 元素是", slice1)
	fmt.Println("slice1 元素个数", len(slice1))
	fmt.Println("slice 的容量", cap(slice1))

	//第三种使用方式

	var strSplice1 []string = []string{"12", "123"}

	fmt.Printf("strSplice1 type %T\n", strSplice1)

	fmt.Println("strSplice1 元素是", strSplice1)
	fmt.Println("strSplice1 元素个数", len(strSplice1))
	fmt.Println("strSplice1 的容量", cap(strSplice1))

}
